#pragma once
#include <semaphore.h>

namespace SemMudule
{
    const int defalutsemval = 1;
    class sem
    {
        
        public:
        sem(int semval = defalutsemval):_init_value(semval)
        {
            ::sem_init(&_sem,0,_init_value);
        }
        void P()
        {
             ::sem_wait(&_sem);
        }
        void V()
        {
             ::sem_post(&_sem);
        }
        ~sem()
        {
            ::sem_destroy(&_sem);
        }
        private:
            sem_t _sem;
            int _init_value;
    };
}